//1. 将联合类型断言成具体类型
interface Cat {
  name: string
  run(): void
}
interface Fish {
  name: string
  swim(): void
}

function getName(animal: Cat | Fish) {
  // 将animal断言为Cat
  return (animal as Cat).run()
}

// 2. 将父类断言成子类
class ApiError extends Error {
  code: number = 0
}
class HttpError extends Error {
  statusCode: number = 200
}

function isApiError(error: Error) {
  if (typeof (error as ApiError).code === 'number') {
    return true
  }
  return false
}

// 3. 将任何类型断言成any(其实就是不让ts检查了)
;(window as any).xxx = 1

//4. 将any断言成一个具体的类型
// 注意: 代码本身是一段伪代码(无法真正执行.主要用来将ts类型问题)
function getCacheData(key: string): any {
  return (window as any).cache[key]
}

interface Cat {
  name: string
  run(): void
}

const tom = getCacheData('tom') as Cat
tom.run()

// 思考题?

// 能不能把一个字符串,断言成数字
